package com.tianhao.luo.springbusiness.service;

import com.tianhao.luo.springbusiness.entity.User;

/**
 * @author tianhao.luo@hand-china.com
 */
public interface OrderService {

    /**
     * 测试REQUIRED
     *
     * 默认使用的事务传播行为
     * 如果当前存在事务，则加入该事务；如果当前没有事务，则创建一个新的事务
     */
    void testPropagationOfRequired();

    /**
     * 测试SUPPORTS
     *
     * 如果当前存在事务，则加入该事务；如果当前没有事务，则也不创建事务
     */
    void testPropagationOfSupports();

    /**
     * MANDATORY
     */
    void testPropagationOfMandatory();

    /**
     * REQUIRES_NEW
     */
    void testPropagationOfRequiresNew();
    void testPropagationOfRequiresNew2();
    void testPropagationOfRequiresNew3();

    /**
     * NOT_SUPPORTED
     */
    void testPropagationOfNotSupport();

    /**
     * NEVER
     */
    void testPropagationOfNever();

    /**
     * NESTED
     */
    void testPropagationOfNested();
    void testPropagationOfNested2();

    /**
     * 测试事务隔离级别
     *
     * 脏读操作
     *
     * @param user 上一个未提交的事务的数据
     */
    void testDirtyRead(User user);


    /**
     *
     * 测试丢失修改
     *
     * @param user 数据库中已有的记录
     */
    void testLostEdit(User user);


    /**
     * 测试不可重复读
     *
     * @param user 参数
     */
    void testNotRepeatableRead(User user);


    /**
     * 测试幻读
     *
     * 提供给userService来插入数据的
     */
    void testPhantomRead();
}
